#include <iostream>
#include <algorithm>
#include <climits>
#include <cstring>
#include <cassert>
typedef int QueueElement;

typedef struct QueueNode
{
    QueueElement QueueValue;
    QueueNode* next;
}QNode;

struct Queue
{
    QNode* headptr;
    QNode* tailptr;
    int size;
};

//初始化
void QueueInit(Queue*& pq);
//销毁
void QueueDestroy(Queue*& pq);
// 队尾插入
void QueuePush(Queue*& pq, QueueElement x);
// 队头删除
void QueuePop(Queue*& pq);
// 取队头和队尾的数据
QueueElement QueueFront(Queue* pq);
QueueElement QueueBack(Queue* pq);
//队列中的数据个数
int QueueSize(Queue* pq);
//判断队列是否为空
bool QueueEmpty(Queue* pq);
//输出队列元素
void QueuePrint(Queue* pq);